package manager;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Equipos {
	private String serial;
	private String marca;
	private String categoria;
	private String proyecto;
	private String estado;
	private String ubicacion;
	private int activo;
	
	private db conexion = null;
	
	
	
	public int getActivo() {
		return activo;
	}

	public void setActivo(int activo) {
		this.activo = activo;
	}

	public String getSerial() {
		return serial;
	}

	public void setSerial(String serial) {
		this.serial = serial;
	}

	public String getMarca() {
		return marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}

	public db getConexion() {
		return conexion;
	}

	public void setConexion(db conexion) {
		this.conexion = conexion;
	}

	public String getCategoria() {
		return categoria;
	}

	public void setCategoria(String categoria) {
		this.categoria = categoria;
	}

	public String getProyecto() {
		return proyecto;
	}

	public void setProyecto(String proyecto) {
		this.proyecto = proyecto;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getUbicacion() {
		return ubicacion;
	}

	public void setUbicacion(String ubicacion) {
		this.ubicacion = ubicacion;
	}

	public Equipos(db conexion) {
		super();
		this.conexion = conexion;
		this.serial = "";
		this.marca = "";
		this.proyecto = "";
		this.estado = "";
		this.activo = 1;
		this.categoria = "";
		this.ubicacion = "";
	}
	
	public boolean add() throws SQLException{
		boolean result = false;
			String sql = "insert into equipos (serial,marca,activo,proyecto,estado,categoria,ubicacion) values ("+
					"'" + this.serial + "'," +
					"'" + this.marca + "'," + 
					"'" + this.activo + "'," + 
					"'" + this.proyecto + "'," + 
					"'" + this.estado + "'," + 
					"'" + this.categoria + "'," +
					"'" + this.ubicacion + "')";
			if (conexion.Update(sql) > 0) {
				conexion.Commit();
				result = true;
			}
		return result;
	}

	public boolean modify(String key) throws SQLException {
		boolean result = false;

			String sql = String.format("update equipos set serial='%s',marca='%s',activo=%s,proyecto='%s',estado='%s',categoria='%s',ubicacion='%s' where serial='%s'",this.serial,this.marca,this.activo,this.proyecto,this.estado,this.categoria,this.ubicacion,key);
			if (conexion.Update(sql) > 0) {
				conexion.Commit();
				result = true;
			}
			
		return result;	
	}
	
	public boolean remove(String key) throws SQLException {
		boolean result = false;

			String sql = String.format("delete from equipos where serial='%s'",key);
			if (conexion.Update(sql) > 0) {
				conexion.Commit();
				result = true;
			}
			
		return result;	
	}
	
	public boolean Find(String key) throws SQLException {
		boolean result = false;
			String sql = String.format ("select serial,marca,estado,activo,ubicacion,proyecto,categoria from equipos where serial='%s'",key);
			ResultSet rs = conexion.Query(sql);
			if (rs.next()) {
				this.serial = (String)rs.getString("serial");
				this.marca = (String)rs.getString("marca");
				this.activo = rs.getInt("activo");
				this.estado = (String)rs.getString("estado");
				this.categoria = (String)rs.getString("categoria");
				this.proyecto = (String)rs.getString("proyecto");
				this.ubicacion = (String)rs.getString("ubicacion");
				result = true;
			}
			rs.close();
			
		return result;	
	}
	
	public ResultSet Find(String key,String activo) throws SQLException {
		 	
			String sql = "Select serial,categoria,catedesc,marca,marcdesc,ubicacion,ubicaciones.nombre " +
					"from equipos,marcas,categorias,ubicaciones " +
					"where marca=marccodi " +
					"and categoria=catecodi " +
					"and ubicacion=ubicaciones.codigo " +
					"and serial=? " +
					"and activo = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, key);
			pst.setString(2, activo);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				return rs;
			}else {
				return null;
			}
			
	}
	
	public ResultSet List() throws SQLException {
		ResultSet result = null;
			String sql = "select serial,marca,estado,activo,ubicacion,proyecto,categoria from equipos order by marca";
			result = conexion.Query(sql);
			return result;	
	}
	public String CreateSelectHTML(String id) {
		String strHtml = "<select id='" + id + "' name='" + id + "'>" ;
		
		try {
			ResultSet rs = List();
			if (rs.next()) {
				do {
				strHtml += "<option value='" + rs.getString("serial") + "'>" + rs.getString("serial") + "</option>";
				}while(rs.next());
			}
		} catch (SQLException e) {
			
		}
		
		strHtml += "<select>";
		return strHtml;
	}
	public String CreateSelectHTML(String id,String key) {
		String strHtml = "<select id='" + id + "' name='" + id + "'>" ;
		try {
			ResultSet rs = List();
			if (rs.next()) {
				do {
					String c = "";
					if (key.equals(rs.getString("serial"))) c="selected";
					
				strHtml += "<option value='" + rs.getString("serial") + "' " + c + ">" + rs.getString("serial") + "</option>";
				}while(rs.next());
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
		}
		
		strHtml += "<select>";
		return strHtml;
	}
	
	public boolean CambioUbicacion(String equipo, String new_ubicacion, String usuario) throws SQLException {
		boolean result = false;
		String sql = "update equipos set ubicacion = ? where serial=?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, new_ubicacion);
		pst.setString(2, equipo);
		
		if (conexion.Update(pst) > 0){
			Historial h = new Historial();
			h.setEquipo(equipo);
			h.setMotivo(GestionHistorial.CAMBIO_UBICACION);
			Ubicaciones u = new Ubicaciones(conexion);
			u.Find(new_ubicacion);
			h.setObservacion("NUEVA UBICACION: " + u.getDescripcion());
			h.setUsuario(usuario);
			GestionHistorial gh = new GestionHistorial(conexion,h);
			if (gh.Add()) {
				conexion.Commit();
				result = true;
			}else {
				conexion.Rollback();
				throw new SQLException("Error al agregar registro al historial");
			}
			
		}
		
	return result;	
		
	}
	public boolean CambioEstado(String equipo, String new_estado, String usuario) throws SQLException {
		boolean result = false;
		String sql = "update equipos set estado = ? where serial=?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, new_estado);
		pst.setString(2, equipo);
		
		if (conexion.Update(pst) > 0){
			Historial h = new Historial();
			h.setEquipo(equipo);
			h.setMotivo(GestionHistorial.CAMBIO_ESTADO);
			Estados e = new Estados(conexion);
			e.Find(new_estado);
			h.setObservacion("NUEVO ESTADO: " + e.getDescripcion());
			h.setUsuario(usuario);
			GestionHistorial gh = new GestionHistorial(conexion,h);
			if (gh.Add()) {
				conexion.Commit();
				result = true;
			}else {
				conexion.Rollback();
				throw new SQLException("Error al agregar registro al historial");
			}
		}
		
	return result;	
		
	}
	

}
